package cn.edu.tjufe.llp.tin.service.sys;

import java.util.List;

import cn.edu.tjufe.llp.tin.dto.sys.SysUserDto;
import cn.edu.tjufe.llp.tin.model.sys.SysUser;

public interface SysUserService {
	/**
	 * 通过用户名查询用户。登录时配合SpringSecurity使用
	 * 
	 * @param name
	 * @return
	 */
	SysUser findByUsername(String username);
	
	
	boolean existsByUsername(String username);

	/**
	 * 根据Id查询用户。
	 * 
	 * @param id
	 * @return
	 */
	SysUser findById(long id);

	/**
	 * 通过用户名用户状态查询用户信息。
	 * 
	 * @param name 查询条件，使用like %name%
	 * @return
	 */
	List<SysUser> findLike(String name);

	/**
	 * 查询所有未被删除的用户
	 * 
	 * @return
	 */
	List<SysUser> findAll();
	
	/**
	 * 创建新用户的信息。
	 * 
	 * @param pojo
	 * @return
	 */
	SysUser create(SysUser pojo);
	
	long signUp(SysUserDto userDto);

	/**
	 * 管理员修改其他用户的信息。不修改密码。
	 * 
	 * @param pojo
	 */
	SysUser update(SysUser pojo);

	/**
	 * 用户本人修改自己的信息。不修改密码。
	 * 
	 * @param pojo
	 */
	SysUser updateSelfInfo(SysUser pojo);

	/**
	 * 管理员修改其他用户的密码。
	 * 
	 * @param id
	 * @param newPassword
	 */
	SysUser changPassword(long id, String newPassword);

	/**
	 * 用户本人修改自己的密码。需要验证原密码是否正确。
	 * 
	 * @param id
	 * @param currentPassword
	 * @param newPassword
	 */
	SysUser changSelfPassword(long id, String currentPassword, String newPassword);

	/**
	 * 删除用户。物理删除。
	 * 
	 * @param id
	 */
	void deleteById(long id);
	
	/**
	 * 禁止用户。
	 * 
	 * @param id
	 */
	void disableById(long id);

}
